<template>
  <div></div>
</template>

<script>
  import {take, map, mergeAll, mergeMap, switchMap,delay,concatMap,concat} from 'rxjs/operators'  //注意merge是静态的,mergeAll是实例主导的
  import {fromEvent, interval, merge,of,scheduled,race} from 'rxjs'

  /*
  *
*/
  export default {
    name: "switch-all-switch-map-00",
    mounted() {
      const st = new Date;
      function eclipsed() {
        return new Date() - st;
      }
      const letters = of('a', 'b', 'c');
      const result = letters.pipe(
        //map(c => of(c).pipe(delay(1200))), //得到的是 新的观察者
        concatMap(c => of(c).pipe(delay(500))), //得到是 每个延时一定时间后的值
        switchMap(x => interval(1000).pipe(map(i => ({[i]:x})),take(5))), ///switchMap 订阅最新的,所以 结果是 c0~c4 上游高阶 abc  产生一个新的内部 Observable 时，switchAll 就会立即订阅最新的内部 Observable
      );
      result.subscribe(x => console.log(x,eclipsed()));
      /** 时间线,每个线段表示500毫秒
       * 第一种情况,abc间隔1000毫秒
       a
       b
       c
       延时后
       abc
    a'  -0-1-2-3-4      -----a子线 500ms 时,b刷新了a,1000ms时 c刷新了a  那么ab订阅无效了
    b'   -0-1-2-3-4     -----b子线  2500ms  c0 取消了b0,a0
    c'    -0-1-2-3-4    -----c子线   3500ms   c0 取消了b0,a1
       --xx!x!x!x!x!-------------------------switch地平线,投射出现多个相交时,优先级为新出现的
        //流组合类型,时序如下:
       {0: "c"} 2510
       {1: "c"} 3509
       {2: "c"} 4511
       {3: "c"} 5510
       {4: "c"} 6508
       */

    }
  }
</script>

<style scoped>

</style>
